SOLID — это аббревиатура, обозначающая группу из пяти хороших принципов (правил) компьютерного программирования. SOLID позволяет программистам писать код, который легче понять и изменить в дальнейшем. SOLID часто используется с системами, использующими объектно-ориентированный дизайн.
Давайте объясним принципы SOLID на примере транспортного средства. Представьте, что мы разрабатываем систему управления различными типами транспортных средств, например автомобилями и электромобилями, для транспортных услуг.
Пример транспортного средства: Представьте, что у вас есть машина. Он отвечает за вождение, но не должен отвечать за собственное техническое обслуживание (например, замену масла или замену шин). Вместо этого за это отвечает отдельный механик.
Объяснение: В нашем коде класс Vehicle должен обрабатывать только вещи, связанные с самим транспортным средством, например хранить его марку и модель. Если нам нужно управлять обслуживанием, мы создаем для этого отдельный класс обслуживания. Таким образом, у каждого класса есть одна задача или ответственность, что упрощает управление кодом.
class Vehicle def initialize(make, model) @make = make @model = model end end class Maintenance def initialize(vehicle) @vehicle = vehicle end def perform_maintenance puts "Performing maintenance on #{@vehicle.make} #{@vehicle.model}" end end
Пример транспортного средства: Предположим, у вас есть базовый автомобиль, и теперь вы хотите добавить в свою систему электромобиль. Вам не нужно изменять существующий класс автомобилей, чтобы добавить функции для электромобилей. Вместо этого вы можете расширить существующий функционал, создав новый класс электромобилей.
Объяснение: Класс Vehicle открыт для расширения (вы можете создавать новые типы транспортных средств, например, ElectricVehicle), но закрыт для модификации (вам не нужно изменять сам класс Vehicle, чтобы добавлять новые типы).
class Vehicle def initialize(make, model) @make = make @model = model end def description "#{@make} #{@model}" end end class ElectricVehicleL - Принцип замены Лискова (LSP)
Пример транспортного средства: Представьте, что у вас есть автопарк, и вы можете без проблем заменить любой обычный автомобиль на электромобиль. Оба должны иметь возможность выполнять свою основную функцию - вождение - не нарушая систему.
Объяснение: Любой подкласс (например, ElectricVehicle) должен иметь возможность заменять свой родительский класс (Vehicle) без изменения поведения программы. Это гарантирует, что наш код сможет одинаково обрабатывать разные типы транспортных средств.class Vehicle def initialize(make, model) @make = make @model = model end def drive puts "Driving the #{@make} #{@model}" end end class ElectricVehicleI - Принцип разделения интерфейсов (ISP)
Пример транспортного средства: Представьте, что у вас есть разные типы транспортных средств: некоторые можно заряжать (например, электромобили), а некоторые можно только водить (например, бензиновые автомобили). Вы не хотите, чтобы бензиновому автомобилю приходилось сталкиваться с методами зарядки.
Объяснение: Классы должны реализовывать только те интерфейсы (или поведение), которые им необходимы. Например, электрический автомобиль может реализовывать интерфейсы как Drivable, так и Chargeable, тогда как обычный автомобиль реализует только Drivable.module Drivable def drive raise NotImplementedError, "This #{self.class} cannot drive" end end module Chargeable def charge raise NotImplementedError, "This #{self.class} cannot be charged" end end class Vehicle include Drivable def initialize(make, model) @make = make @model = model end def drive puts "Driving the #{@make} #{@model}" end end class ElectricVehicleD - Принцип инверсии зависимостей (DIP)
Пример транспортного средства: Представьте, что у автомобиля могут быть разные типы двигателей: газовый или электрический. Вместо того, чтобы напрямую зависеть от конкретного типа двигателя, автомобиль должен зависеть от более общего интерфейса двигателя, чтобы он мог использовать любой тип двигателя.
Объяснение: Модули высокого уровня (например, Транспортное средство) не должны зависеть от модулей низкого уровня (например, GasEngine или ElectricEngine). Оба должны зависеть от абстракций (например, интерфейса Engine). Это делает систему более гибкой и простой в изменении.class Engine def start raise NotImplementedError, "This #{self.class} cannot start" end end class GasEngineСледуя принципам SOLID в этом примере с автомобилем, мы можем создать систему, которую легко обслуживать, расширять и адаптировать к новым требованиям.
LinkedIn: https://www.linkedin.com/in/anandsoni11/
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3